import puppeteer from "../../../lib/puppeteer/puppeteer.js";
import {
    createAGroupFolder,
    getGroupList,
    getGroupPlayerList,
    getPlayerData,
    isGroupExist,
    isPlayerExist,
    PLUGIN_PATH,
    readConfiguration,
    storagePlayerData
} from '../function/function.js';
export class Bs extends plugin {
    constructor() {
        super({
            name: '[Bs]面包排行榜',
            dsc: '面包排行榜',
            event: 'message',
            priority: 1,
            rule: [
                { reg: /^[#\/](.*)排行榜$/, fnc: 'breadRankingList' },
                { reg: /^[#\/](.*)全局排行榜$/, fnc: 'breadAllRankingList' }
            ]
        })
    }

    async breadRankingList(e) {
        // 非群无法游玩
        if (!e.isGroup) return e.reply(['该游戏只能在群内使用'])
        /** ID [群, 用户] */
        const ID = [e.group_id, e.user_id]
        /** 用户输入内容 */
        const USER_INPUT_CONTENT = e.msg.replace(/#|\/|排行榜/g, '')
        /** 配置数据 */
        const configData = await readConfiguration()
        /** 默认物品 */
        let defaultItem = configData['bread_thing']
        /** 自定义物品 */
        const CUSTOM_ITEMS = configData['special_thing_group'][ID[0]]

        // 判断执行条件 [不存在自定义物品 同时 用户输入内容不为默认物品] 或者 [存在自定义物品 同时 用户输入内容不为自定义物品]
        if (!CUSTOM_ITEMS && USER_INPUT_CONTENT !== defaultItem || CUSTOM_ITEMS && USER_INPUT_CONTENT !== CUSTOM_ITEMS) return false
        // 存在自定义物品 默认物品修改为自定义物品
        if (CUSTOM_ITEMS) {
            defaultItem = CUSTOM_ITEMS
        }

        // 判断是否有此群文件夹，没有则创建
        if (!isGroupExist(ID[0])) { createAGroupFolder(ID[0]) }

        // 判断是否存在该用户，没有则创建基础信息
        if (!isPlayerExist(ID[0], ID[1])) {
            storagePlayerData(ID[0], ID[1], {
                name: e.sender.card || '未设置面包昵称',
                lv: 0,
                xp: 0,
                number: 0,
                cd: { buy: 0, eat: 0, rob: 0, give: 0, bet: 0 },
                log: { buy: [], eat: [], rob: [], give: [], bet: [] }
            })
        }

        /** 群用户列表 */
        let GROUP_USER_LIST = getGroupPlayerList(ID[0])
        GROUP_USER_LIST = GROUP_USER_LIST.map(function (element) {
            return element.replace(/.json/g, '') // 删除.json后缀
        })
        /** 群用户数量 */
        const USER_NUMBER = GROUP_USER_LIST.length

        /** 排行数据 */
        let rankingData = []
        for (let i = 0; i < USER_NUMBER; i++) {
            const USER_DATA = await getPlayerData(ID[0], GROUP_USER_LIST[i])
            const { name, lv, number } = USER_DATA
            const headPortrait = !isNaN(GROUP_USER_LIST[i]) ? `https://q1.qlogo.cn/g?b=qq&s=0&nk=${GROUP_USER_LIST[i]}` : `https://q.qlogo.cn/qqapp/${GROUP_USER_LIST[i].split('-')[0]}/${GROUP_USER_LIST[i].split('-')[1]}/640`
            rankingData.push({
                name, lv, number,
                headPortrait
            })
        }

        // 进行大小排序
        rankingData.sort((a, b) => {
            if (a.lv === b.lv) { // 等级相同 比较面包数量
                return b.number - a.number;
            } else {
                return b.lv - a.lv;
            }
        })
        // 仅展示七位
        rankingData = rankingData.slice(0, 15)

        /** 彩蛋 */
        let imageType = 'Bread'
        if (/^(只因|坤坤|鸽鸽|爱坤)$/.test(defaultItem)) imageType = 'Kun'
        if (defaultItem === '滑稽') imageType = 'HuaJi'
        if (defaultItem === '光崽') imageType = 'Sky'

        /** 排行榜图片 */
        const image = await puppeteer.screenshot('排行榜', {
            tplFile: 'plugins/Bread-Shop/resources/html/breadRankingList/index.html',
            filePath: `${PLUGIN_PATH}/resources/`,
            rankingData, defaultItem, imageType,
            quantity: 15, type: '本群'
        })

        return e.reply([image])
    }

    async breadAllRankingList(e) {
        // 非群无法游玩
        if (!e.isGroup) return e.reply(['该游戏只能在群内使用'])
        /** ID [群, 用户] */
        const ID = [e.group_id, e.user_id]
        /** 用户输入内容 */
        const USER_INPUT_CONTENT = e.msg.replace(/#|\/|全局排行榜/g, '')
        /** 配置数据 */
        const configData = await readConfiguration()
        /** 默认物品 */
        let defaultItem = configData['bread_thing']
        /** 自定义物品 */
        const CUSTOM_ITEMS = configData['special_thing_group'][ID[0]]

        // 判断执行条件 [不存在自定义物品 同时 用户输入内容不为默认物品] 或者 [存在自定义物品 同时 用户输入内容不为自定义物品]
        if (!CUSTOM_ITEMS && USER_INPUT_CONTENT !== defaultItem || CUSTOM_ITEMS && USER_INPUT_CONTENT !== CUSTOM_ITEMS) return false
        // 存在自定义物品 默认物品修改为自定义物品
        if (CUSTOM_ITEMS) {
            defaultItem = CUSTOM_ITEMS
        }

        // 判断是否有此群文件夹，没有则创建
        if (!isGroupExist(ID[0])) { createAGroupFolder(ID[0]) }

        // 判断是否存在该用户，没有则创建基础信息
        if (!isPlayerExist(ID[0], ID[1])) {
            storagePlayerData(ID[0], ID[1], {
                name: e.sender.card || '未设置面包昵称',
                lv: 0,
                xp: 0,
                number: 0,
                cd: { buy: 0, eat: 0, rob: 0, give: 0, bet: 0 },
                log: { buy: [], eat: [], rob: [], give: [], bet: [] }
            })
        }

        /** 群列表 */
        const GROUP_LIST = getGroupList()
        /** 排行数据 */
        let rankingData = []

        for (const GROUP_ID of GROUP_LIST) {
            let GROUP_USER_LIST = getGroupPlayerList(GROUP_ID)
            GROUP_USER_LIST = GROUP_USER_LIST.map(function (element) {
                return element.replace(/.json/g, '') // 删除.json后缀
            })

            for (let i = 0; i < GROUP_USER_LIST.length; i++) {
                const USER_DATA = await getPlayerData(GROUP_ID, GROUP_USER_LIST[i])
                const { name, lv, number } = USER_DATA
                const headPortrait = !isNaN(GROUP_USER_LIST[i]) ? `https://q1.qlogo.cn/g?b=qq&s=0&nk=${GROUP_USER_LIST[i]}` : `https://q.qlogo.cn/qqapp/${GROUP_USER_LIST[i].split('-')[0]}/${GROUP_USER_LIST[i].split('-')[1]}/640`
                rankingData.push({
                    name, lv, number,
                    headPortrait
                })
            }
        }

        // 进行大小排序
        rankingData.sort((a, b) => {
            if (a.lv === b.lv) { // 等级相同 比较面包数量
                return b.number - a.number;
            } else {
                return b.lv - a.lv;
            }
        })
        // 仅展示十二位
        rankingData = rankingData.slice(0, 25)

        /** 彩蛋 */
        let imageType = 'Bread'
        if (/^(只因|坤坤|鸽鸽|爱坤)$/.test(defaultItem)) imageType = 'Kun'
        if (defaultItem === '滑稽') imageType = 'HuaJi'
        if (defaultItem === '光崽') imageType = 'Sky'

        /** 排行榜图片 */
        const image = await puppeteer.screenshot('排行榜', {
            tplFile: 'plugins/Bread-Shop/resources/html/breadRankingList/index.html',
            filePath: `${PLUGIN_PATH}/resources/`,
            rankingData, defaultItem, imageType,
            quantity: 25, type: '全局'
        })

        return e.reply([image])
    }
}